package lkx.demo.test2;

/**

 1. 对象在内存中的分配涉及到的内存结构（理论）
 - 栈(stack): 方法内定义的变量，存储在栈中。
 - 堆(heap) : new 出来的结构（比如：数组实体、对象的实体）。包括对象中的属性
 - 方法区(method area) : 存放类的模板。比如：Person类的模板


 2. 类中对象的内存解析
 2.1 创建类的一个对象
 2.2 创建类的多个对象

 强调1：创建了Person类的两个对象
 Person p1 = new Person();
 Person p2 = new Person();

 说明：创建类的多个对象时，每个对象在堆空间中有一个对象实体。每个对象实体中保存着一份类的属性。
 如果修改某一个对象的某属性值时，不会影响其他对象此属性的值。
 p1.age = 10;
 p2.age = 20;

 p1.age = 30;
 System.out.println(p2.age);//20

 强调2：声明类的两个变量
 Person p1 = new Person();
 Person p3 = p1;

 说明：此时的p1，p3 两个变量指向了堆空间中的同一个对象实体。（或p1,p3保存的地址值相同）
 如果通过其中某一个对象变量修改对象的属性时，会影响另一个对象变量此属性的值。

 p1.age = 10;
 p3.age = 20;
 System.out.println(p1.age);//20


 2.3 对象调用方法的过程（在"03-类的成员之二：方法"中讲解）



 * @author kunxianli
 * @date 2024/02/01 17:25
 **/
public class TestObjectMemory {

    public static void main(String[] args) {
        Person p1 = new Person();
        p1.name = "赵同学";
        p1.age = 20;
        p1.isMale = true;
        Person p2 = new Person();
        p2.age = 10;
        Person p3 = p1;
        p3.name = "郭同学";
    }

}
